package com.luxsoft.siipap.em.replica.importadores.ventas;

import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.util.Assert;

import com.luxsoft.siipap.em.replica.importadores.ImportadorSupport;
import com.luxsoft.siipap.model.core.Producto;
import com.luxsoft.siipap.ventas.model.Venta;
import com.luxsoft.siipap.ventas.model.VentaDet;

/**
 * Importa partidas de Ventas de  la version de Oracle a la nueva version
 * 
 * @author Ruben Cancino
 *
 */
public class ImportadorDeVentasDet implements RowMapper{
	
	private JdbcTemplate jdbcTemplate;
	private final ImportadorSupport support;
	
	public ImportadorDeVentasDet(final ImportadorSupport support){
		this.support=support;
	}
	
	public void importar(Venta factura){
		
		String sql="SELECT * FROM V_VENTASDET WHERE VENTA_ID=?";
		List<VentaDet> partidas=jdbcTemplate.query(sql, new Object[]{factura.getSiipapWinId()}, this);
		for(VentaDet det:partidas){
			factura.agregarPartida(det);
		}
	}
	
	public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
		VentaDet det=new VentaDet();
		BigDecimal cantidad=rs.getBigDecimal("CANTIDAD");
		
		BigDecimal factor=rs.getBigDecimal("FACTORUNI");
		String prod=rs.getString("CLAVE").trim();
		Producto producto=support.buscarProducto(prod);
		Assert.notNull(producto,"No existe el producto: "+prod);
		det.setProducto(producto);
		det.setCantidad(cantidad.multiply(factor).doubleValue());
		det.setFactor(factor.doubleValue());
		
		BigDecimal descuentoContado=rs.getBigDecimal("DESCUENTO_CONTADO");
		det.setDescuento(descuentoContado.doubleValue());
		
		BigDecimal descuentoNota=rs.getBigDecimal("DESCUENTO_C");
		det.setDescuentoNota(descuentoNota.doubleValue());
		
		BigDecimal descOrigen=rs.getBigDecimal("DESCUENTO");
		det.setDescuentoOriginal(descOrigen.doubleValue());
		
		BigDecimal precioFacturado=rs.getBigDecimal("PRECIOFACTURADO");
		
		det.setImporte(precioFacturado.multiply(cantidad.multiply(BigDecimal.valueOf(-1))));
		BigDecimal desctoNeto=descuentoNota.add(descuentoContado);
		desctoNeto=BigDecimal.valueOf(desctoNeto.doubleValue()/100);
		
		BigDecimal descuentoImp=det.getImporte().multiply(desctoNeto);
		det.setImporteNeto(det.getImporte().subtract(descuentoImp));
		det.setDocumento(rs.getLong("NUMERO"));
		det.setPrecio(precioFacturado);
		det.setPrecioCorte(BigDecimal.ZERO);
		det.setPrecioLista(rs.getBigDecimal("PRECIOLISTA"));
		
		det.setRenglon(rs.getInt("RENGLON"));
		det.setSerie(rs.getString("SERIE"));
		det.setSubTotal(rs.getBigDecimal("IMP_PART"));
		det.setTipo(rs.getString("TIPOFACTURA"));
		det.setSiipapWinId(rs.getLong("VENTADET_ID"));
		det.setFecha(rs.getDate("FECHA"));
		
		det.siipapWinVentaId=rs.getLong("VENTA_ID");// Solo util para la carga
		return det;
	}

	
	
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}
	
	

}
